home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / vexe400.zip / VEXE.DOC < prev    next >
Text File  |  1991-12-16  |  77KB  |  1,895 lines

  1.         ╔════════════════════════════════════════════════════════════════╗
  2.         ║               ▒▒▄ ▒▒▄ ▒▒▒▒▒▒▄ ▒▒▄ ▒▒▄ ▒▒▒▒▒▒▄                  ║
  3.         ║               ▒▒█ ▒▒█ ▒▒█▀▀▀▀  ▒▒▒▒█  ▒▒█▀▀▀▀                  ║
  4.         ║               ▒▒█ ▒▒█ ▒▒▒▒▒▄    ▒▒█   ▒▒▒▒▒▄                   ║
  5.         ║                ▒▒▒▒█▀ ▒▒█▀▀▀   ▒▒▒▒▄  ▒▒█▀▀▀                   ║
  6.         ║                 ▒▒█▀  ▒▒▒▒▒▒▄ ▒▒█▀▒▒▄ ▒▒▒▒▒▒▄                  ║
  7.         ║                  ▀▀    ▀▀▀▀▀▀  ▀▀  ▀▀  ▀▀▀▀▀▀                  ║
  8.         ╚════════════════════════════════════════════════════════════════╝
  9.         ╔════════════╦═══════════════════════════════════════════════════╗
  10.         ║ VEXE v4.00 ║  EXE files analyzer.  Copyright (C) 1991 S.Krupa  ║
  11.         ╚════════════╩═══════════════════════════════════════════════════╝
  12.  
  13.  
  14.  
  15.  
  16.         ┌────────────────────────────────────────────────────────────────┐
  17.         │▒ Topic ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Line ▒│
  18.         └────────────────────────────────────────────────────────────────┘
  19.  
  20.  
  21.          I) Introduction to VEXE . . . . . . . . . . . . . . . . .   69
  22.             1)  VEXE Overview  . . . . . . . . . . . . . . . . . .   79
  23.             2)  Software License . . . . . . . . . . . . . . . . .  109
  24.             3)  Registration Information . . . . . . . . . . . . .  180
  25.  
  26.  
  27.         II) Using VEXE . . . . . . . . . . . . . . . . . . . . . .  304
  28.             1)  Explanation of the Command Line. . . . . . . . . .  314
  29.             2)  VEXE options . . . . . . . . . . . . . . . . . . .  608
  30.                 c  Show filename & filesize with packer & compiler
  31.                    infos . . . . . . . . . . . . . . . . . . . . .  615
  32.                 e  Show Windows entry table bundles. . . . . . . .  779
  33.                 h  Show classical DOS executable file header . . .  847
  34.                 l  Descend down thru the directories for file
  35.                    searching . . . . . . . . . . . . . . . . . . .  967
  36.                 m  Show Windows imported modules table . . . . . . 1007
  37.                 n  Show Windows non-resident names table . . . . . 1033
  38.                 q  Query after each block of informations. . . . . 1083
  39.                 r  Show Windows resident names table . . . . . . . 1111
  40.                 s  Show Windows segment table. . . . . . . . . . . 1161
  41.                 t  Show classical DOS executable file relocation
  42.                    table . . . . . . . . . . . . . . . . . . . . . 1238
  43.                 w  Show Windows executable file header . . . . . . 1275
  44.                 z  Show Windows segments relocation items. . . . . 1420
  45.             3)  VEXE default options . . . . . . . . . . . . . . . 1521
  46.  
  47.        III) VEXE Error Messages. . . . . . . . . . . . . . . . . . 1567
  48.  
  49.         IV) Bugs and Warnings. . . . . . . . . . . . . . . . . . . 1644
  50.  
  51.          V) VEXE Tips. . . . . . . . . . . . . . . . . . . . . . . 1698
  52.  
  53.         VI) Files included in this archive . . . . . . . . . . . . 1724
  54.  
  55.        VII) Bibliography . . . . . . . . . . . . . . . . . . . . . 1746
  56.  
  57.       VIII) History. . . . . . . . . . . . . . . . . . . . . . . . 1765
  58.  
  59.         IX) Acknowledgements . . . . . . . . . . . . . . . . . . . 1791
  60.  
  61.          X) Trademarks and Copyrights. . . . . . . . . . . . . . . 1808
  62.  
  63.         XI) Last words and address . . . . . . . . . . . . . . . . 1860
  64.  
  65.  
  66.  
  67.  
  68.         ┌─┬──────────────────────────┐
  69.         │I│▒▒ INTRODUCTION TO VEXE ▒▒│
  70.         └─┴──────────────────────────┘
  71.  
  72.  
  73.           This section contains an introduction to VEXE,  one  of
  74.         the most flexible .EXE, .DLL and .DRV files analyzer.
  75.  
  76.  
  77.  
  78.         ┌─┬───────────────────┐
  79.         │1│▒▒ VEXE OVERVIEW ▒▒│
  80.         └─┴───────────────────┘
  81.  
  82.  
  83.             VEXE is an easy to use utility  program  designed  to
  84.         analyze thoroughly any  .EXE,  or  structurally  similar,
  85.         file.
  86.  
  87.             Executable files may make use  of  multiple  segments
  88.         for code, stack, and data. The design of  the  .EXE  file
  89.         reflects the segmented design  of  the  Intel  80x86  CPU
  90.         architecture.
  91.  
  92.             The .EXE files produced by the linker consist of  two
  93.         parts, control and relocation information (in the header),
  94.         and the load module itself.
  95.  
  96.             The new .EXE format used in Windows  and  OS/2  .EXE,
  97.         .DLL and .DRV files puts more information into the header
  98.         section. Although this makes EXE files larger, it  allows
  99.         an .EXE program to use DLLs (Dynamic Link Libraries)  and
  100.         to run in a multi-task environment.
  101.  
  102.             This program is designed to examine these Windows  or
  103.         DOS executables and to report with fidelity every  useful
  104.         information found in the header or in the load module.
  105.  
  106.  
  107.  
  108.         ┌─┬──────────────────────┐
  109.         │2│▒▒ SOFTWARE LICENSE ▒▒│
  110.         └─┴──────────────────────┘
  111.  
  112.  
  113.            VEXE is  not a  Public Domain program and is not free.
  114.         VEXE is copyright (C) 1991 by Serge Krupa.
  115.  
  116.            Non-registered users of this  program  are  granted  a
  117.        limited two-week license to VEXE to evaluate the  programs
  118.        suitability for their  requirements.  Any  usage  of  VEXE
  119.        beyond evaluation time  period  requires  registration  of
  120.        each copy of the program used. Use of nonregistered copies
  121.        of VEXE beyond original evaluation period is prohibited.
  122.  
  123.            Registration entitles you to use VEXE and  any  future
  124.        versions of VEXE for as long as you wish, subject  to  any
  125.        special  licensing conditions attached to future versions.
  126.  
  127.            Serge Krupa is in no way obligated to  provide  future
  128.        versions of, or support for, VEXE.
  129.  
  130.            VEXE may NOT be modified in any respect, including but
  131.        not limited to,  decompiling,  disassembling,  or  reverse
  132.        engineering of the program. Patching the medium at  places
  133.        that carry the software is seen as a program change and is
  134.        also forbidden.
  135.  
  136.            You are free  to  distribute  the  PUBLICLY  AVAILABLE
  137.        shareware version of VEXE to others subject to  the  above
  138.        restrictions and also the following:
  139.  
  140.                   1. No  fee  is  charged  for  its  use.
  141.  
  142.                   2. No renumeration may be accepted  for
  143.                      VEXE. Pay Bulletin Board Systems may
  144.                      however   charge  their  normal  fee
  145.                      provided that no  additional  charge
  146.                      for RA is levied.
  147.  
  148.                   3. VEXE must  be  copied  in  unaltered
  149.                      form, complete with all accompanying
  150.                      files.
  151.  
  152.            System Operators may make VEXE available for  download
  153.        only if the above conditions are met. The archive VEXE.ZIP
  154.        distributed by Serge Krupa or an equivalant archive may be
  155.        made available only in complete form.
  156.  
  157.            VEXE may not be  included  as  part  of  any  software
  158.        library which is distributed on a commercial  basis  ("for
  159.        money")  without prior written permission from Serge Krupa.
  160.        This   condition   statement   supersedes   all   previous
  161.        agreements.
  162.  
  163.            VEXE may not be used in any unlawful or illegal manner.
  164.  
  165.            Serge Krupa hereby disclaims all  warranties  relating
  166.         to this software, whether express or  implied,  including
  167.         without limitation any implied warranties of merchandabi-
  168.         lity or fitness for a  particular  purpose.  Serge  Krupa
  169.         will  not  be  liable  for   any   special,   incidental,
  170.         consequential, indirect or similar damages  due  to  loss
  171.         of data or any other reason. This includes,  but  is  not
  172.         limited  to,  computer   hardware,   computer   software,
  173.         operating systems, and any computer or  computing  acces-
  174.         sories. The person using the software bears all  risk  as
  175.         to the quality and performance of the software.
  176.  
  177.  
  178.  
  179.         ┌─┬──────────────────────────────┐
  180.         │3│▒▒ REGISTRATION INFORMATION ▒▒│
  181.         └─┴──────────────────────────────┘
  182.  
  183.  
  184.            The above license statement  does  not  apply  to  the
  185.         REGISTERED version of VEXE. It must be treated just  like
  186.         a book with certain exceptions as follows:
  187.  
  188.                   1. Serge Krupa  authorizes  the  making
  189.                      of archival copies of the registered
  190.                      software for  the  sole  purpose  of
  191.                      backing-up your software.
  192.  
  193.                   2. The  customer may resell unmodified
  194.                      copies of the  registered  software
  195.                      provided   that  the  customer  has
  196.                      purchased from Serge Krupa one copy
  197.                      of the registered software for each
  198.                      one   sold   or   distributed.  The
  199.                      provisions of this software license
  200.                      shall also be applicable  to  third
  201.                      parties  receiving  copies  of  the
  202.                      registered   software   from    the
  203.                      customer.
  204.  
  205.                   3. By saying, just like a book,  Serge
  206.                      Krupa  means  that  the  registered
  207.                      software may be used by any  number
  208.                      of people and may be  freely  moved
  209.                      from  one   computer   location  to
  210.                      another  so   long   as   there  is
  211.                      absolutely  NO  possibility  of  it
  212.                      being used at  one  location  while
  213.                      being used at another. Just like  a
  214.                      book that cannot  be  read  by  two
  215.                      different people in  two  different
  216.                      locations at the same time.
  217.  
  218.  
  219.             If you find VEXE fast, easy, and  convenient  to use,
  220.         you can become a registered user. Once a registered  user
  221.         of VEXE, you are free to utilize the program as often  as
  222.         you wish.  Other than having a  clear  conscience,  there
  223.         are many advantages to register. You will receive in  the
  224.         mail a fully functionnal registered version of VEXE  with
  225.         much larger tables to handle even the biggest Windows  or
  226.         OS/2 programs, and any new improvement made to VEXE (such
  227.         as ability to list Windows resources, text searching...).
  228.         Users who have registered (and received a  diskette)  may
  229.         upgrade to the latest version of VEXE  by  sending  their
  230.         VEXE original disk, along with $8 (service and handling).
  231.  
  232.             For $15.00 (not  including  shipping/handling),  I'll
  233.         send you the latest shareware and registered versions  of
  234.         VEXE on disk along with documentation (on disk).  If  you
  235.         want to receive VEXE on a 3.5 inch diskette (720k format),
  236.         add an additional $3 for each diskette ordered.
  237.  
  238.             Please use the following form when placing an  order.
  239.  
  240.  
  241.         ______________________ ORDER FORM _______________________
  242.  
  243.  
  244.           Please Remit To:    Mr Serge Krupa
  245.                               19 A chemin des Bois
  246.                               1255 Geneva
  247.                               SWITZERLAND
  248.  
  249.  
  250.           Qty.   Description                       Each    Total
  251.  
  252.           ____   VEXE Upgrade to latest  version  $08.00   _____
  253.                  (You must return your  original
  254.                  diskette containing  your  copy
  255.                  of the  registered  version  of
  256.                  VEXE)
  257.  
  258.           ____   VEXE  Registration  with  5.25"  $15.00   _____
  259.                  diskette (Registration includes
  260.                  diskette with the latest share-
  261.                  ware  and  registered   program
  262.                  versions along with  manual  on
  263.                  diskette)
  264.  
  265.           ____   VEXE  Registration  with   3.5"  $18.00   _____
  266.                  diskette (same as above  except
  267.                  on new size media)
  268.  
  269.                                                   Subtotal _____
  270.  
  271.  
  272.           (Europe  orders add $3 shipping)        Shipping _____
  273.           (Foreign orders add $5 shipping)
  274.  
  275.  
  276.                                                   TOTAL   $_____
  277.  
  278.  
  279.            Name: _______________________________________________
  280.  
  281.         Company: _______________________________________________
  282.  
  283.         Address: _______________________________________________
  284.  
  285.                  _______________________________________________
  286.  
  287.                  _______________________________________________
  288.  
  289.  
  290.         Mail the above form along with a Banker's Draft payable
  291.         to:
  292.                    Mr Serge Krupa, CH-1255 Geneva
  293.  
  294.         at the:
  295.                    Swiss Bank Corporation
  296.                    Cornavin
  297.                    CH-1211 Geneva 1
  298.  
  299.         Check amount must be in Swiss Francs.
  300.  
  301.  
  302.  
  303.         ┌──┬────────────────┐
  304.         │II│▒▒ USING VEXE ▒▒│
  305.         └──┴────────────────┘
  306.  
  307.  
  308.             This section describes the command line structure  of
  309.         VEXE and explains the options.
  310.  
  311.  
  312.  
  313.         ┌─┬─────────────────────────────────────┐
  314.         │1│▒▒ EXPLANATION OF THE COMMAND LINE ▒▒│
  315.         └─┴─────────────────────────────────────┘
  316.  
  317.  
  318.             All of the commands used with VEXE are entered on the
  319.         command line at the DOS prompt.  The command options used
  320.         with VEXE  are  explained  in  detail  in  the  following
  321.         section, along with examples.
  322.  
  323.             The VEXE command line structure is shown below.
  324.  
  325.  
  326.         VEXE  [/[options]["output file"]]  [path][input file]
  327.  
  328.  
  329.         VEXE        = The executable file analyzer program.
  330.  
  331.         options     = The different VEXE  options that  you
  332.                       can specify.
  333.  
  334.         path        = The path location of  the  executable
  335.                       file being analyzed.
  336.  
  337.         input file  = The name of the executable file being
  338.                       analyzed,  also  referred  as  input.
  339.                       DOS wildcards  are  allowed  in  this
  340.                       name.
  341.  
  342.         output file = The name and path location of the text
  343.                       file produced during analysis  of  the
  344.                       input file, also referred  as  output.
  345.  
  346.  
  347.         NOTE:  Parameters listed in [ ] are optional.
  348.  
  349.  
  350.  
  351.         ┌──────────────┐
  352.         │▒▒ EXAMPLES ▒▒│
  353.         └──────────────┘
  354.  
  355.  
  356.             Suppose that you're  interested  knowing  the content of
  357.         the header of PKZIP.EXE. You just type at  the  DOS  prompt:
  358.  
  359.  
  360.             C:\> VEXE  C:\PKZIP.EXE
  361.  
  362.  
  363.             In this example the file PKZIP.EXE will be analyzed and
  364.         the output sent to your computer screen. After you type the
  365.         command  shown  above,  VEXE  will  display  the  following
  366.         information on the screen.
  367.  
  368.  
  369.         ╔════════════╦═══════════════════════════════════════════════════╗
  370.         ║ VEXE v4.00 ║  EXE files analyzer.  Copyright (C) 1991 S.Krupa  ║
  371.         ╚════════════╩═══════════════════════════════════════════════════╝
  372.         ┌──────┬─────────────────────────────────────────────────────────┐
  373.         │ SIZE │ File PKZIP.EXE is really   8070h bytes long.            │
  374.         ├──────┼─────────────────────────────────────────────────────────┤
  375.         │ LOAD │ The load module size for this file is  32 Kb.           │
  376.         ├──────┼─────────────────────────────────────────────────────────┤
  377.         │ PACK │ File not packed.                                        │
  378.         ├──────┼─────────────────────────────────────────────────────────┤
  379.         │ COMP │ File compiled with Microsoft C or Quick C.              │
  380.         └──────┴─────────────────────────────────────────────────────────┘
  381.         ┌──────────────────────────────────────┬─────────────────────────┐
  382.         │  File size found in header           │      8070h bytes        │
  383.         │  Number of relocation table entries  │      0017h              │
  384.         │  Size of header                      │      0200h bytes        │
  385.         │  Minimum 16-bytes paragraphs needed  │      0D47h              │
  386.         │  Maximum 16-bytes paragraphs desired │      FFFFh              │
  387.         │  SS:SP relative to program's start   │      14D6h:0580h        │
  388.         │  Checksum                            │      BC7Ah              │
  389.         │  CS:IP relative to program's start   │      0000h:56D6h        │
  390.         │  Offset of relocation table          │      001Eh bytes        │
  391.         │  Overlay number                      │      0000h              │
  392.         └──────────────────────────────────────┴─────────────────────────┘
  393.  
  394.  
  395.             Because you specified no option  in  the  command  line,
  396.         VEXE used its default options to  process  PKZIP.EXE.  These
  397.         default options will be explained later.
  398.  
  399.             The output shown above is typical for most DOS executable
  400.         files, the first block containing results  of  VEXEs  'smart'
  401.         analysis and the second block showing the content of the .EXE
  402.         file header.
  403.  
  404.             The following example illustrates  the  analysis  of  an
  405.         ordinary Microsoft Windows file.
  406.  
  407.  
  408.             C:\> VEXE  C:\WINDOWS\CPUUSE.EXE
  409.  
  410.  
  411.         ╔════════════╦═══════════════════════════════════════════════════╗
  412.         ║ VEXE v4.00 ║  EXE files analyzer.  Copyright (C) 1991 S.Krupa  ║
  413.         ╚════════════╩═══════════════════════════════════════════════════╝
  414.         ┌──────┬─────────────────────────────────────────────────────────┐
  415.         │ SIZE │ File CPUUSE.EXE is really   3200h bytes long.           │
  416.         ├──────┼─────────────────────────────────────────────────────────┤
  417.         │ LOAD │ The load module size for this file is   1 Kb.           │
  418.         ├──────┼─────────────────────────────────────────────────────────┤
  419.         │ PACK │ Microsoft WINDOWS 3.00 program (never packed).          │
  420.         ├──────┼─────────────────────────────────────────────────────────┤
  421.         │ COMP │ File compiled with Microsoft C or Quick C.              │
  422.         └──────┴─────────────────────────────────────────────────────────┘
  423.         ┌──────────────────────────────────────┬─────────────────────────┐
  424.         │  File size found in header           │       527h bytes        │
  425.         │  Number of relocation table entries  │      0000h              │
  426.         │  Size of header                      │      0200h bytes        │
  427.         │  Minimum 16-bytes paragraphs needed  │      0000h              │
  428.         │  Maximum 16-bytes paragraphs desired │      FFFFh              │
  429.         │  SS:SP relative to program's start   │      0007h:0100h        │
  430.         │  Checksum                            │      4065h              │
  431.         │  CS:IP relative to program's start   │      0000h:0000h        │
  432.         │  Offset of relocation table          │      0040h bytes        │
  433.         │  Overlay number                      │      0000h              │
  434.         │  New-style EXE header offset         │      0400h bytes        │
  435.         └──────────────────────────────────────┴─────────────────────────┘
  436.         ┌──────────────────────────────────────┬─────────────────────────┐
  437.         │  Linker version and revision numbers │      5.10               │
  438.         │  Offset of entry table               │      00FDh bytes        │
  439.         │  Bytes in entry table                │      0076h bytes        │
  440.         │  32-bit CRC of entire file           │  76A359ADh              │
  441.         │  Flags                               │  NONSHARED PMAPI        │
  442.         │  Segment number of auto data segment │      0004h              │
  443.         │  Initial size of dynamic heap        │      0400h bytes        │
  444.         │  Initial size of stack               │      1000h bytes        │
  445.         │  Program entry point CS:IP           │      0003h:0011h        │
  446.         │  Initial stack pointer SS:SP         │      0004h:0000h        │
  447.         │  Number of entries in segment table  │      0004h              │
  448.         │  Module reference count              │      0003h              │
  449.         │  Bytes in nonresident-name table     │      0030h bytes        │
  450.         │  Offset of segment table             │      0040h bytes        │
  451.         │  Offset of resource table            │      0060h bytes        │
  452.         │  Offset of resident-name table       │      00DCh bytes        │
  453.         │  Offset of module-reference table    │      00E6h bytes        │
  454.         │  Offset of imported-names table      │      00ECh bytes        │
  455.         │  Offset of nonresident-name table    │       573h bytes        │
  456.         │  Number of movable entry points      │      0013h              │
  457.         │  Shift count of logical sector align │      0009h              │
  458.         │  Number of reserved segments         │      0000h              │
  459.         └──────────────────────────────────────┴─────────────────────────┘
  460.         ┌────────────────────────────────────────────────────────────────┐
  461.         │                      Resident-name table                       │
  462.         ├──────┬─────────────────────────────────────────────────────────┤
  463.         │Number│                    Title                                │
  464.         ├──────┼─────────────────────────────────────────────────────────┘
  465.         │    0 │cpuuse
  466.         ├──────┼───────┬──────┬────────┬─────────────────────────────────┐
  467.         │Number│Segment│Offset│  Flags │              Name               │
  468.         ├──────┼───────┼──────┼────────┼─────────────────────────────────┘
  469.         └──────┴───────┴──────┴────────┘
  470.         ┌────────────────────────────────────────────────────────────────┐
  471.         │                    Non-resident name table                     │
  472.         ├──────┬─────────────────────────────────────────────────────────┤
  473.         │Number│                  Description                            │
  474.         ├──────┼─────────────────────────────────────────────────────────┘
  475.         │    0 │CPU Usage Meter by Jim Seidman
  476.         ├──────┼───────┬──────┬────────┬─────────────────────────────────┐
  477.         │Number│Segment│Offset│  Flags │              Name               │
  478.         ├──────┼───────┼──────┼────────┼─────────────────────────────────┘
  479.         │    1 │    1  │ 01E6h│EXPORTED│ MAINWNDPROC
  480.         └──────┴───────┴──────┴────────┘
  481.         ┌────────────────────────────────────────────────────────────────┐
  482.         │                        Segment table                           │
  483.         ├──────┬───────────┬────────┬────────┬───────────────────────────┤
  484.         │Number│  Offset   │  File  │ Memory │         Flags             │
  485.         ├──────┼───────────┼────────┼────────┼───────────────────────────┘
  486.         │    1 │      800h │  0527h │  0527h │ CODE EXECREAD MOVEABLE NONSHARED
  487.         │      │           │        │        │ PRELOAD NONCONFORMING RELOC
  488.         │      │           │        │        │ NOIOPL NONDISCARDABLE
  489.         │    2 │     1000h │  02DEh │  02DEh │ CODE EXECREAD MOVEABLE NONSHARED
  490.         │      │           │        │        │ PRELOAD NONCONFORMING RELOC
  491.         │      │           │        │        │ NOIOPL DISCARDABLE
  492.         │    3 │     1400h │  079Fh │  079Fh │ CODE EXECREAD MOVEABLE NONSHARED
  493.         │      │           │        │        │ PRELOAD NONCONFORMING RELOC
  494.         │      │           │        │        │ NOIOPL NONDISCARDABLE
  495.         │    4 │     1E00h │  034Ah │  034Ah │ DATA READWRITE MOVEABLE NONSHARED
  496.         │      │           │        │        │ PRELOAD NONCONFORMING
  497.         │      │           │        │        │ NOIOPL NONDISCARDABLE
  498.         └──────┴───────────┴────────┴────────┘
  499.         ┌────────────────────────────────────────────────────────────────┐
  500.         │                    Entry table bundles                         │
  501.         └────────────────────────────────────────────────────────────────┘
  502.         ┌────────────────────────────────────────────────────────────────┐
  503.         │                  Moveable segment bundle                       │
  504.         ├──────┬───────────┬──────────────────┬──────────────────────────┤
  505.         │Number│   Flags   │  Segment number  │         Offset           │
  506.         ├──────┼───────────┼──────────────────┼──────────────────────────┤
  507.         │    1 │  EXPORTED │       0001h      │          01E6h           │
  508.         │    2 │   0000h   │       0003h      │          0740h           │
  509.         │    3 │   0000h   │       0003h      │          05FAh           │
  510.         │    4 │   0000h   │       0001h      │          0000h           │
  511.         │    5 │   0000h   │       0002h      │          0000h           │
  512.         │    6 │   0000h   │       0003h      │          062Ch           │
  513.         │    7 │   0000h   │       0003h      │          0648h           │
  514.         │    8 │   0000h   │       0003h      │          06E2h           │
  515.         │    9 │   0000h   │       0003h      │          0720h           │
  516.         │   10 │   0000h   │       0003h      │          0714h           │
  517.         │   11 │   0000h   │       0001h      │          0063h           │
  518.         │   12 │   0000h   │       0003h      │          008Ah           │
  519.         │   13 │   0000h   │       0003h      │          021Ch           │
  520.         │   14 │   0000h   │       0003h      │          03AEh           │
  521.         │   15 │   0000h   │       0001h      │          0165h           │
  522.         │   16 │   0000h   │       0003h      │          0149h           │
  523.         │   17 │   0000h   │       0003h      │          0157h           │
  524.         │   18 │   0000h   │       0003h      │          04F6h           │
  525.         │   19 │   0000h   │       0003h      │          04FCh           │
  526.         └──────┴───────────┴──────────────────┴──────────────────────────┘
  527.         ┌──────┬─────────────────────────────────────────────────────────┐
  528.         │Number│             Imported module name table                  │
  529.         ├──────┼─────────────────────────────────────────────────────────┘
  530.         │    1 │KERNEL
  531.         │    2 │GDI
  532.         │    3 │USER
  533.         └──────┘
  534.  
  535.  
  536.             You see that VEXE produces a much, much, longer  list  of
  537.         informations when dealing with Microsoft Windows executables.
  538.         This is perfectly natural, since Windows .EXE files  contains
  539.         a new header (third output  block)  and  many  tables  (other
  540.         output blocks) in addition of the ancient DOS header.
  541.  
  542.             Listed below is a summary of important facts to keep in
  543.         mind while using VEXE.
  544.  
  545.             - The commands can be typed using either upper case or
  546.               lower case.
  547.  
  548.             - The first option, or the output file  specification,
  549.               must be preceded by the MS-DOS switch  character '/'
  550.               (i.e.   VEXE/CQ input  -OR-  VEXE/"output"CQ input).
  551.  
  552.             - Options must be combined with no space between  them
  553.               (i.e.  VEXE/CQWL"output"  input).
  554.  
  555.             - The order in which options appears  on  the  command
  556.               line has no effect on the order  information  blocks
  557.               are listed on-screen.
  558.  
  559.             - Typing VEXE on the command line with no options, will
  560.               bring up  a  help  screen  listing  all  the  program
  561.               options.
  562.  
  563.             - Every DOS wildcards are allowed  in  the  input file
  564.               name (i.e. VEXE EX??.*).
  565.  
  566.             - Path and input file name together are limited to  63
  567.               characters.
  568.  
  569.             The following table lists all the options available with
  570.         VEXE. A brief summary  is  also  given  in  the  table.  The
  571.         options are explained  in  detail,  along  with  programming
  572.         examples in the following section.
  573.  
  574.  
  575.                         VEXE COMMAND OPTIONS
  576.          ───────────────────────────────────────────────────
  577.          Option                    Summary
  578.  
  579.            c     show filename & filesize with packer & compiler infos
  580.  
  581.            e     show Windows entry table bundles
  582.  
  583.            h     show classical DOS executable file header
  584.  
  585.            l     descend down thru the directories for file searching
  586.  
  587.            m     show Windows imported modules table
  588.  
  589.            n     show Windows non-resident names table
  590.  
  591.            q     query after each block of informations
  592.  
  593.            r     show Windows resident names table
  594.  
  595.            s     show Windows segment table
  596.  
  597.            t     show classical DOS executable file relocation table
  598.  
  599.            w     show Windows executable file header
  600.  
  601.            z     show Windows segments relocation items
  602.  
  603.          ────────────────────────────────────────────────────
  604.  
  605.  
  606.  
  607.         ┌─┬──────────────────┐
  608.         │2│▒▒ VEXE OPTIONS ▒▒│
  609.         └─┴──────────────────┘
  610.  
  611.             The VEXE options are described below.
  612.  
  613.  
  614.             ┌─┬─────────────────────────────────────────────────────┐
  615.             │c│show filename & filesize with packer & compiler infos│
  616.             └─┴─────────────────────────────────────────────────────┘
  617.  
  618.  
  619.             This option is used to tell VEXE to do a 'smart' analysis
  620.             of the executable input file.
  621.  
  622.                           C:\> VEXE/C  MYPROG.EXE
  623.  
  624.             In the example shown above a block containing informations
  625.             about the input file will be produced. Below is a list and
  626.             explanation of each section of this block.
  627.  
  628.  
  629.             SIZE : input file's disk size (in hex notation).
  630.  
  631.             LOAD : input file's load module  size.  This  is
  632.                    the added size of code and constant  data
  633.                    contained in the executable. It's not the
  634.                    memory requirement of  this  executable !
  635.                    You need to add  the  minimum  number  of
  636.                    paragraphs required to this size to  find
  637.                    the executable memory occupation.
  638.  
  639.             PACK : Packing is a way to reduce the .EXE  file
  640.                    size, leaving the code  executable.  VEXE
  641.                    will detect if the EXE file is packed  by
  642.                    one of the following packers:
  643.  
  644.                    EXEPACK : A MicroSoft product, not usual-
  645.                              ly available but packaged  with
  646.                              certain  software  (MASM  5.1).
  647.                              Apparently   the   first   such
  648.                              program   of  this  type  (1986
  649.                              copyright). New versions of Link
  650.                              optionally EXEPACK the .EXE file
  651.                              linked.
  652.  
  653.                    LZEXE   : Developed  by   Fabrice  Bellard
  654.                              ( current   version   is   0.91,
  655.                              backward compatible with version
  656.                              0.90 ).  This  program  was  the
  657.                              first     generally    available
  658.                              executable file  compressor  and
  659.                              is the most  widely  used.  VEXE
  660.                              reports packing by  any  version
  661.                              of LZEXE, even if no packer mark
  662.                              could be found ! Files  compres-
  663.                              sed by LZEXE are unpacked on the
  664.                              fly by VEXE for better  compiler
  665.                              search.
  666.  
  667.                    PKLITE  : Developed by  PKWARE  (purveyors
  668.                              of PKZIP), this program compres-
  669.                              ses  (and   un-compresses)  .COM
  670.                              and  .EXE  only.  VEXE  features
  671.                              recognition of files  compressed
  672.                              with PKLITE v1.03 to v1.13.  The
  673.                              kind of compression used is also
  674.                              stated, even the unusual 'favor'
  675.                              compression  used  when  packing
  676.                              well-known softwares.
  677.  
  678.                    DIET    : Created by Teddy Matsumoto,  the
  679.                              author of LEXEM an archive  soft
  680.                              used in Japan. Files  packed  by
  681.                              DIET version 1.00 to v1.10a  are
  682.                              recognized,   but   DIET  v1.10a
  683.                              compression is not distinguished
  684.                              from DIET v1.02 compression.
  685.  
  686.                    TINYPROG: Shareware from Tranzoa Ass. Only
  687.                              the   latest  versions  offer  a
  688.                              slightly  more effective packing
  689.                              than  EXEPACK.  No  uncompressor
  690.                              available.
  691.  
  692.                    SCRNCH  : G.W. McRae's  SCRNCH  is  mostly
  693.                              used to pack .COM files, so  you
  694.                              are not likely to encounter  any
  695.                              .EXE   file   packed  with  this
  696.                              program.
  697.  
  698.                    The packing is detected by the presence of
  699.                    an  unpacking routine at a given point  of
  700.                    the file. This way the ID bytes stored  by
  701.                    some packers aren't necessary to determine
  702.                    if the file is compressed,  and  by  which
  703.                    method. There is no hidden packing to VEXE!
  704.  
  705.                    When some conditions are met,  VEXE  guess
  706.                    that the .EXE file currently analyzed  was
  707.                    packed, but the packing method is unknown.
  708.  
  709.                    If the file is a Microsoft WINDOWS, or OS2,
  710.                    one, a message  stating  this  is  output,
  711.                    along with Windows  version  necessary  to
  712.                    run the program.
  713.  
  714.             COMP : Most of the .EXE  files  are  produced  by
  715.                    compilers. Reflecting this fact, VEXE will
  716.                    try to  determine  the  compiler  used  to
  717.                    produce the code of the file. The  current
  718.                    version of VEXE can detect  files  created
  719.                    with:
  720.  
  721.                          - Microsoft C or Quick C
  722.  
  723.                          - Turbo C
  724.  
  725.                          - Turbo C++
  726.  
  727.                          - Meridian C, Ada or Pascal
  728.  
  729.                          - Lattice C
  730.  
  731.                          - Power C
  732.  
  733.                          - Zortech C
  734.  
  735.                          - Quick Basic
  736.  
  737.                          - Turbo Basic
  738.  
  739.                          - Turbo Pascal (version 5.5 & 6.0)
  740.  
  741.                          - Turbo Prolog
  742.  
  743.                          - Logitech Modula 2
  744.  
  745.                          - JPI TopSpeed Modula 2
  746.  
  747.                          - Janus Ada
  748.  
  749.                    A proprietary  algorithm is  also  used to
  750.                    spot  .EXE   files   made  using  assembly
  751.                    language. The accuracy of  this  detection
  752.                    is over 85 % .
  753.  
  754.                    Sometimes VEXE  is  unable  to  find  what
  755.                    compiler produced the .EXE file.  This  is
  756.                    often the case with files generated by old
  757.                    versions of Turbo Pascal, or some  unknown
  758.                    (to VEXE) C compilers.
  759.  
  760.                    Another  reason  that  prevent  VEXE  from
  761.                    finding the compiler who has produced  the
  762.                    .EXE code is file packing. In packed files
  763.                    the compiler mark is often unreadable.This
  764.                    is why I decided  to  include  a  slightly
  765.                    modified version of the  code  of  UNLZEXE
  766.                    v0.6, written by Mitugu(Kou) Kurizono,  in
  767.                    VEXE. Therefore, when a  file packed  with
  768.                    LZEXE v0.90 or v0.91  is  processed,  VEXE
  769.                    will unpack it on the fly to  search  more
  770.                    accuratly the compiler mark. This  usually
  771.                    result in  much  longer  processing  time.
  772.                    When a file that  hasn't  been  packed  by
  773.                    LZEXE is analyzed and no compiler mark  is
  774.                    found, VEXE assume that  packing  rendered
  775.                    this mark unreadable.
  776.  
  777.  
  778.             ┌─┬────────────────────────────────┐
  779.             │e│show Windows entry table bundles│
  780.             └─┴────────────────────────────────┘
  781.  
  782.  
  783.             This option will instruct  VEXE  to  display  the
  784.             entry table bundles of a Windows  or  OS/2  .EXE,
  785.             .DLL or .DRV file.
  786.  
  787.  
  788.                           C:\> VEXE/E  WINPROG.EXE
  789.  
  790.  
  791.             The entry table contains bundles of  entry  point
  792.             ordinal values. Other .EXE  files  may  refer  to
  793.             entry points  within  a  given  bundle  by  their
  794.             ordinal value. They are two kind of bundles, each
  795.             having its particular format.
  796.  
  797.             First, the moveable segment bundle  contains  the
  798.             following fields:
  799.  
  800.                    - Entry point ordinal value (1 to  999).
  801.                      This is the only value not printed  in
  802.                      hex (h stands for "hex").
  803.  
  804.                    - Flags. VEXE can interpret three flags,
  805.                      exported,  shared   and  exported  and
  806.                      shared. Other flags are shown  in  hex
  807.                      value.
  808.  
  809.                    - Segment number  (see  segment  table).
  810.  
  811.                    - Offset in the segment.
  812.  
  813.             Second, the fixed  segment  bundle  contains  the
  814.             following fields:
  815.  
  816.                    - Entry point ordinal value (1 to  999).
  817.                      This is the only value not printed  in
  818.                      hex (h stands for "hex").
  819.  
  820.                    - Flags. VEXE can interpret three flags,
  821.                      exported,  shared   and  exported  and
  822.                      shared. Other flags are shown  in  hex
  823.                      value.
  824.  
  825.                    - Offset in the segment.
  826.  
  827.             The fixed segment number appears in the header of
  828.             the block.
  829.  
  830.             If you want to abort the display of  this  table,
  831.             just press ESCAPE.
  832.  
  833.             Other tables refer to this entry table, therefore
  834.             it is loaded every time a Windows or OS/2 file is
  835.             processed. The unregistered version of  VEXE  can
  836.             only hold 100 entries. This is enough for  little
  837.             programs, but if you want to analyze a big  file,
  838.             the registered version of  VEXE  with  its  table
  839.             capable of holding 800 entries will be necessary.
  840.  
  841.             Caution:  Borland's TDUMP is unable  to  properly
  842.                       list the entry table.  You  better  use
  843.                       VEXE!
  844.  
  845.  
  846.             ┌─┬─────────────────────────────────────────┐
  847.             │h│show classical DOS executable file header│
  848.             └─┴─────────────────────────────────────────┘
  849.  
  850.  
  851.             This option is used to produce an output  of  the
  852.             standard, "classical", .EXE header, found  a  the
  853.             very beginning of  every  DOS,  Windows  or  OS/2
  854.             executable or library file.
  855.  
  856.  
  857.                           C:\> VEXE/H  DOSPROG.EXE
  858.  
  859.  
  860.             The .EXE format can support programs larger  than
  861.             64K. It does this by allowing  separate  segments
  862.             to be defined for code, data, and the stack, each
  863.             of which can be up to 64K long. Programs  in  EXE
  864.             format may contain explicit references to segment
  865.             addresses. This .EXE file header has informations
  866.             for DOS to resolve these references.
  867.  
  868.             The .EXE header bears the following informations:
  869.  
  870.  
  871.             - File size found in header:
  872.  
  873.               This is the size of the program  found  in  the
  874.               EXE  header. The real size of  the  program  on
  875.               disk could be different than this size. In this
  876.               case the executable probably contains  internal
  877.               overlays.   Overlays   always  means  that  the
  878.               program wasn't compressed.
  879.  
  880.  
  881.             - Number of relocation table entries:
  882.  
  883.               Depending how many  subroutines,  for  example,
  884.               the   EXE   program   contain,  the  number  of
  885.               relocation  entries  found  in  the  relocation
  886.               table will be different.
  887.  
  888.  
  889.             - Size of header:
  890.  
  891.               The header size is also the offset to the  load
  892.               module in the executable  file.
  893.  
  894.  
  895.             - Minimum 16-bytes paragraphs needed:
  896.  
  897.               This field gives the DOS  during  code  loading
  898.               the   absolute  minimum  number  of  paragraphs
  899.               required above the end of the  loaded  program.
  900.  
  901.  
  902.             - Maximum 16-bytes paragraphs desired:
  903.  
  904.               Maximum number of 16  byte  paragraphs  desired
  905.               above the end of the  loaded  program.  If  the
  906.               minimum and maximum number  of  paragraphs  are
  907.               both zero, the program will be loaded  as  high
  908.               in memory as possible.
  909.  
  910.  
  911.             - SS:SP relative to program's start:
  912.  
  913.               The SS:SP pair indicates the  position  of  the
  914.               stack segment, usually the last one in the file.
  915.  
  916.  
  917.             - Checksum:
  918.  
  919.               Negative sum of all  the  words  in  the  file,
  920.               ignoring overflow. This checksum is essentially
  921.               used to store flags showing that the file  is a
  922.               packed one (EXEPACK do it this way).
  923.  
  924.  
  925.             - CS:IP relative to program's start:
  926.  
  927.               The CS:IP pointer is an usual INTEL format four
  928.               bytes seg:ofs pointer.CS:IP points to the first
  929.               instruction   of   the   program   code.   This
  930.               instruction could be found at location
  931.  
  932.                        (CS:IP)+(header size)
  933.  
  934.               of the .EXE file.  After  the  loading  of  the
  935.               program and the segments reference  adaptation,
  936.               the control will be given to the code at CS:IP.
  937.  
  938.  
  939.             - Offset of relocation table:
  940.  
  941.               The relocation table is located immediatly above
  942.               a reserved space (this space is often  used  to
  943.               hold  identification  strings,  like  LZ91  for
  944.               programs compressed with LZEXE  v0.91)  at  the
  945.               end of the header. The offset of the relocation
  946.               table is the number of  bytes  you  must  count
  947.               from the beginning of the  file  to  the  first
  948.               entry of the table. This table hold  relocation
  949.               entries.
  950.  
  951.  
  952.             - Overlay number:
  953.  
  954.               The overlay number is always 0 for the resident
  955.               part of the program.
  956.  
  957.  
  958.             - New-style EXE header offset:
  959.  
  960.               Microsoft Windows and OS/2 .EXE files  includes
  961.               a  second   header.  The  offset  of  this  new
  962.               executable header is only found if  the  offset
  963.               of the relocation  table  is  40h  or  greater.
  964.  
  965.  
  966.             ┌─┬────────────────────────────────────────────────────┐
  967.             │l│descend down thru the directories for file searching│
  968.             └─┴────────────────────────────────────────────────────┘
  969.  
  970.  
  971.             A convenient feature of VEXE is recursive search.
  972.  
  973.  
  974.                    C:\> VEXE/L  C:\EXAMPLE\*.EXE
  975.  
  976.  
  977.             Tell VEXE to descend down thru  the  directories,
  978.             searching for one or more filename  matching  the
  979.             one  that you specified. The search will begin at
  980.             the directory  appearing  in  the  command  line.
  981.             The example shown above instruct VEXE  to  search
  982.             all   filenames   with  .EXE   extension  in  the
  983.             C:\EXAMPLE\ directory, and to continue the search
  984.             in subdirectories  of  C:\EXAMPLE\,  as  deep  as
  985.             necessary in the directory structure.
  986.  
  987.             However, be cautious in using  this  option:  the
  988.             directory  structure of your (hard) disk can't be
  989.             processed deeper than the 32nd level.
  990.  
  991.             If  more  than  one  file  is  found,  VEXE  will
  992.             continuously display the results of its  analysis
  993.             of all the files found, until the informations of
  994.             all file are listed.You can interrupt the listing
  995.             of these informations by pressing ESCAPE  several
  996.             times (if you are lucky one time will be  enough,
  997.             but its possible that you  will  first  interrupt
  998.             the current table listing,  and  only  later  the
  999.             whole process).
  1000.  
  1001.             When you select the L option, it's added  to  the
  1002.             default options, or the ones you already entered:
  1003.             it can't be selected alone!
  1004.  
  1005.  
  1006.             ┌─┬───────────────────────────────────┐
  1007.             │m│show Windows imported modules table│
  1008.             └─┴───────────────────────────────────┘
  1009.  
  1010.  
  1011.             To view this concatenation of the module reference
  1012.             and imported name tables of a Windows or OS/2 .EXE
  1013.             or  library   file,  just  enter  a  command  line
  1014.             including the M option.
  1015.  
  1016.  
  1017.                      C:\> VEXE/M  WINPROG.EXE
  1018.  
  1019.  
  1020.             A table containing names of  modules  imported  by
  1021.             the executable file, together with modules ordinal
  1022.             values in base 10, will be produced.
  1023.  
  1024.             The imported modules table is necessary to properly
  1025.             handle  Windows  relocation  tables.  VEXEs  module
  1026.             table can hold up to 8 module names. The registered
  1027.             version of VEXE can naturally hold much more module
  1028.             names: 20 in total. Another benefit of  registering
  1029.             your copy of VEXE!
  1030.  
  1031.  
  1032.             ┌─┬─────────────────────────────────────┐
  1033.             │n│show Windows non-resident names table│
  1034.             └─┴─────────────────────────────────────┘
  1035.  
  1036.             This option is used to produce an output  of  the
  1037.             nonresident-name table found in every Windows  or
  1038.             OS/2 executable or library file.
  1039.  
  1040.  
  1041.                      C:\> VEXE/N  WINPROG.DLL
  1042.  
  1043.  
  1044.             The nonresident-name table listing  will  contain
  1045.             the following elements:
  1046.  
  1047.                   - A description of the program or library
  1048.                     (this is usually the content  of  entry
  1049.                     number 0 of this table). This  sentence
  1050.                     could be longer than 80 characters  and
  1051.                     will not fit on the screen.  VEXE  will
  1052.                     show a '»' at the end of such sentences.
  1053.  
  1054.                   - Series  of  non-resident   names,  each
  1055.                     accompanied with four fields:
  1056.  
  1057.                     - An ordinal value (1 to  999) refering
  1058.                       to  an   entry  table  entry   point.
  1059.                       The   fields   described   below  are
  1060.                       extracted  directly  from  the  entry
  1061.                       table.
  1062.  
  1063.                     - Flags. VEXE  recognize  three  flags,
  1064.                       exported,  shared  and  exported  and
  1065.                       shared. Other flags are shown in  hex
  1066.                       value.
  1067.  
  1068.                     - Segment number  (see  segment table).
  1069.  
  1070.                     - Offset  in  the  segment,  in  bytes.
  1071.  
  1072.             Exported  nonresident  code  modules  could  be
  1073.             dynamically called at execution time by another
  1074.             executable file. This is  especially  the  case
  1075.             with  nonresident  modules  found  in  standard
  1076.             Microsoft Windows libraries (KERNEL, USER, GDI).
  1077.  
  1078.             This table could reasonably be  empty  in  some
  1079.             files.
  1080.  
  1081.  
  1082.             ┌─┬──────────────────────────────────────┐
  1083.             │q│query after each block of informations│
  1084.             └─┴──────────────────────────────────────┘
  1085.  
  1086.  
  1087.             Many  tables  that  VEXE  is  able  to  display
  1088.             will extend on multiple screens. It's therefore
  1089.             possible that you'll miss the beginning of  the
  1090.             next table when looking at  a  very  long  one.
  1091.  
  1092.             The solution is including the Q option  in  the
  1093.             command line.
  1094.  
  1095.  
  1096.                      C:\> VEXE/Q  MYPROG.EXE
  1097.  
  1098.  
  1099.             VEXE will stop scrolling after every  block  of
  1100.             informations and will ask you to press SPACE to
  1101.             view another block. If you're tired looking  at
  1102.             endless tables, just press  any  other  key  to
  1103.             abort VEXE.
  1104.  
  1105.             When you select the Q option, it's added to the
  1106.             default   options,  or  the  ones  you  already
  1107.             entered: it can't be selected alone!
  1108.  
  1109.  
  1110.             ┌─┬─────────────────────────────────┐
  1111.             │r│show Windows resident names table│
  1112.             └─┴─────────────────────────────────┘
  1113.  
  1114.             This option is used to produce an output  of  the
  1115.             resident-name table found in every Windows or OS2
  1116.             executable or library file.
  1117.  
  1118.  
  1119.                      C:\> VEXE/N  WINPROG.EXE
  1120.  
  1121.  
  1122.             The resident-name table listing will contain  the
  1123.             following elements:
  1124.  
  1125.                   - The name of  the  program  or  library,
  1126.                     usually the content of entry  number  0
  1127.                     of this table.This name could be longer
  1128.                     than 80 characters and will not fit  on
  1129.                     the screen. VEXE will put a '»' at  the
  1130.                     end of such names.
  1131.  
  1132.                   - Series of resident module  names,  each
  1133.                     accompanied with four fields:
  1134.  
  1135.                     - An ordinal value (1 to  999) refering
  1136.                       to  an   entry  table  entry   point.
  1137.                       The   fields   described   below  are
  1138.                       extracted  directly  from  the  entry
  1139.                       table.
  1140.  
  1141.                     - Flags. VEXE  recognize  three  flags,
  1142.                       exported,  shared  and  exported  and
  1143.                       shared. Other flags are shown in  hex
  1144.                       value.
  1145.  
  1146.                     - Segment number  (see  segment table).
  1147.  
  1148.                     - Offset  in  the  segment,  in  bytes.
  1149.  
  1150.             I noticed that resident modules exported by  an
  1151.             executable or a  library  and  imported  by  an
  1152.             other executable have their names copied in the
  1153.             imported module names table of this executable,
  1154.             just after the module name.
  1155.  
  1156.             This table could reasonably be  empty  in  some
  1157.             files.
  1158.  
  1159.  
  1160.             ┌─┬──────────────────────────┐
  1161.             │s│show Windows segment table│
  1162.             └─┴──────────────────────────┘
  1163.  
  1164.  
  1165.             The segment  table  contains  entries  for each
  1166.             segment in  the  executable  or  library  file.
  1167.             This table appears  only  in  Windows  or  OS/2
  1168.             programs.
  1169.  
  1170.  
  1171.                      C:\> VEXE/S  WINPROG.EXE
  1172.  
  1173.  
  1174.             Using this option you tell VEXE  to  display  a
  1175.             list of segment entries,  each  containing  the
  1176.             following subentries:
  1177.  
  1178.  
  1179.                   - Segment number. Segment number  one  is
  1180.                     always  the  first  (decimal  numbers).
  1181.  
  1182.                   - Offset in file. Right  alignment  shift
  1183.                     done  by  VEXE:   no  more  calculation
  1184.                     needed, it's a clean n-bytes offset (in
  1185.                     hexadecimal).
  1186.  
  1187.                   - Length of image  in  file  (in  bytes).
  1188.  
  1189.                   - Size to allocate in memory (in  bytes).
  1190.  
  1191.                   - Flags. Shown below is an explanation of
  1192.                     each flag.
  1193.  
  1194.  
  1195.                     - Data segment flags.  Segment  can  be
  1196.                       CODE, DATA, DATA TYPE n.
  1197.  
  1198.                     - Iterated.
  1199.  
  1200.                     - Movable (segment not fixed).
  1201.  
  1202.                     - Sharable. A segment can be  SHARED or
  1203.                       NONSHARED.
  1204.  
  1205.                     - Preloaded (segment will be preloaded).
  1206.                       A segment can be PRELOAD or LOADONCALL.
  1207.  
  1208.                     - Execute-only. A CODE segment  can  be
  1209.                       EXECONLY or EXECREAD; a DATA  segment
  1210.                       can be READONLY or READWRITE.
  1211.  
  1212.                     - Relocations (directly following  code
  1213.                       for this segment). Not every  segment
  1214.                       have RELOC.
  1215.  
  1216.                     - Debug  info  (CONFORMING   or   not).
  1217.  
  1218.                     - 80286   DPL   bits   (IOPL,  NOIOPL).
  1219.  
  1220.                     - Discardable (with discard  priority).
  1221.                       A segment can be DISCARDABLE or  not.
  1222.  
  1223.  
  1224.             If you want to abort the display of  this  table,
  1225.             just press ESCAPE.
  1226.  
  1227.             The segment table indicates  VEXE  which  segment
  1228.             have relocation entries, and  is  therefore  very
  1229.             important to properly handle  Windows  relocation
  1230.             tables. VEXE have the ability to hold  up  to  50
  1231.             segment entries. The registered version  of  VEXE
  1232.             can naturally hold much larger segment tables, up
  1233.             to 200 entries. So consider registering  VEXE  if
  1234.             well done job is a  primary   concern   for  you!
  1235.  
  1236.  
  1237.             ┌─┬───────────────────────────────────────────────────┐
  1238.             │t│show classical DOS executable file relocation table│
  1239.             └─┴───────────────────────────────────────────────────┘
  1240.  
  1241.  
  1242.             The  relocation  table  is  an  ordered  list  of
  1243.             relocation items. Every segment reference made in
  1244.             a DOS or DOS&Windows program  must  be  relocated
  1245.             using the relocation items.
  1246.  
  1247.  
  1248.                      C:\> VEXE/T  DOSPROG.EXE
  1249.  
  1250.  
  1251.             This option tells VEXE to produce  an  output  of
  1252.             the relocation table  items  pointing  to  target
  1253.             locations needing to be relocated.
  1254.  
  1255.             The relocation item contains two fields:  a  word
  1256.             offset value, followed by a word  segment  value.
  1257.             These two fields represent the displacement  into
  1258.             the load module before the module is given control.
  1259.  
  1260.             The target location is a word in the load  module
  1261.             to which is added the start  segment  value.  The
  1262.             result is placed back into the word in  the  load
  1263.             module.
  1264.  
  1265.             Because the relocation table may contain  several
  1266.             hundred entries, the  T  option  is  inactive  by
  1267.             default to avoid generation  of  Kb  of  unwanted
  1268.             informations every time you use VEXE.
  1269.  
  1270.             You  can  abort  the  display  of  these  entries
  1271.             by pressing ESCAPE.
  1272.  
  1273.  
  1274.             ┌─┬───────────────────────────────────┐
  1275.             │w│show Windows executable file header│
  1276.             └─┴───────────────────────────────────┘
  1277.  
  1278.             Applications that run under Microsoft Windows  or
  1279.             OS/2  uses  a  new  EXE  format  that  puts  more
  1280.             information into the header section.
  1281.  
  1282.  
  1283.                      C:\> VEXE/W  WINPROG.EXE
  1284.  
  1285.  
  1286.             This command line makes VEXE producing  a  header
  1287.             elements list bearing the following informations:
  1288.  
  1289.  
  1290.             - Linker version and revision numbers:
  1291.  
  1292.               Major and minor version of the linker used
  1293.               to make the executable or library file are
  1294.               shown in decimal numbers.
  1295.  
  1296.             - Offset of entry table:
  1297.  
  1298.               Offset in bytes, relative to the beginning
  1299.               of the new-style header.
  1300.  
  1301.             - Bytes in entry table:
  1302.  
  1303.               Length in bytes.
  1304.  
  1305.             - 32-bit CRC of entire file:
  1306.  
  1307.               This double-word is 0 in  Borland's  Turbo
  1308.               Pascal for Windows, and is not checked for
  1309.               consistency.
  1310.  
  1311.             - Flags:
  1312.  
  1313.               1) DGROUP type          :  SHARED
  1314.                                          NONSHARED
  1315.                                          none
  1316.  
  1317.               2) Global initialization:  GLOBALINI
  1318.  
  1319.               3) Protected mode only  :  PROT
  1320.  
  1321.               4) Instruction set      :  86
  1322.                                          286
  1323.                                          386
  1324.                                          x87
  1325.  
  1326.               5) API awareness        :  PMAPI
  1327.                                          (uses Windows/P.M. API)
  1328.                                          NOTPM
  1329.                                          (full screen)
  1330.                                          PMCOMP
  1331.                                          (compatible Windows/P.M. API)
  1332.  
  1333.               6) Errors in image      :  ERROR
  1334.  
  1335.               7) Library (DLL) file   :  LIB
  1336.  
  1337.             - Segment number of auto data segment:
  1338.  
  1339.               It's an  index  into  the  segment  table.
  1340.  
  1341.             - Initial size of dynamic heap:
  1342.  
  1343.               Size in bytes added to the  data  segment.
  1344.  
  1345.             - Initial size of stack:
  1346.  
  1347.               Size in bytes added to the  data  segment.
  1348.  
  1349.             - Program entry point CS:IP:
  1350.  
  1351.               CS is an index  into  the  segment  table.
  1352.  
  1353.             - Initial stack pointer SS:SP:
  1354.  
  1355.               SS is an index  into  the  segment  table.
  1356.  
  1357.             - Number of entries in segment table:
  1358.  
  1359.               How  many   segments  the  file  contains.
  1360.  
  1361.             - Module reference count:
  1362.  
  1363.               How  many  imported   modules   the   file
  1364.               contains. This entry is missing in Windows
  1365.               2.03 documentation and many utilities that
  1366.               list the Windows header are  passing  over
  1367.               this field. This  is  NOT  the  case  with
  1368.               EXEHDR (or VEXE).
  1369.  
  1370.             - Bytes in nonresident-name table:
  1371.  
  1372.             - Offset of segment table:
  1373.  
  1374.               Offset in bytes from the beginning of  the
  1375.               new header.
  1376.  
  1377.             - Offset of resource table:
  1378.  
  1379.               Offset in bytes from the beginning of  the
  1380.               new header. VEXE doesn't list the  content
  1381.               of this table.  Newer  registred  versions
  1382.               will surely have the ability to  do  this.
  1383.  
  1384.             - Offset of resident-name table:
  1385.  
  1386.               Offset in bytes from the beginning of  the
  1387.               new header.
  1388.  
  1389.             - Offset of module-reference table:
  1390.  
  1391.               Offset in bytes from the beginning of  the
  1392.               new header. VEXE doesn't list the  content
  1393.               of this table. Instead, it use it to  make
  1394.               a combined  imported  modules  name  table
  1395.               listing.
  1396.  
  1397.             - Offset of imported-names table:
  1398.  
  1399.               Offset in bytes from the beginning of  the
  1400.               new header. VEXE doesn't list the  content
  1401.               of this table. Instead, it use it to  make
  1402.               a combined  imported  modules  name  table
  1403.               listing.
  1404.  
  1405.             - Offset of nonresident-name table:
  1406.  
  1407.               Offset in bytes from the beginning of  the
  1408.               FILE!
  1409.  
  1410.             - Number of movable entry points:
  1411.  
  1412.             - Shift count of logical sector align:
  1413.  
  1414.               The  sector   size   is  2^(shift  count).
  1415.  
  1416.             - Number of reserved segments:
  1417.  
  1418.  
  1419.             ┌─┬──────────────────────────────────────┐
  1420.             │z│show Windows segments relocation items│
  1421.             └─┴──────────────────────────────────────┘
  1422.  
  1423.  
  1424.             Segment  relocation  tables   immediatly  follows
  1425.             every segment in Windows or OS/2 files having the
  1426.             RELOC flag set.  They  contain,  like  their  DOS
  1427.             counterparts,  relocation   entries,  but   their
  1428.             likeness stops  here:  entries  holds  much  more
  1429.             informations.
  1430.  
  1431.  
  1432.                      C:\> VEXE/Z  WINPROG.DLL
  1433.  
  1434.  
  1435.             Series of information blocks are  displayed  when
  1436.             you start VEXE with the Z parameter.  Each  block
  1437.             begin with a header  telling  you  which  segment
  1438.             relocation table is currently processed.  Follows
  1439.             a generally long list of relocation  entries  for
  1440.             this segment.
  1441.  
  1442.             I must confess that  I  wrote  relocation  tables
  1443.             display routines without  any  documentation  for
  1444.             their format other than what I  could  guess.  It
  1445.             seems to work pretty well,  but  the  explanation
  1446.             following must be read with  caution,  because  I
  1447.             haven't wrote facts, but rather the results of my
  1448.             own analysis.
  1449.  
  1450.             Basically,  three  types  of  relocation  entries
  1451.             could be distinguished:
  1452.  
  1453.  
  1454.                   - IMP entries containing calls to Windows
  1455.                         services, or to library  functions.
  1456.  
  1457.                   - SEG entries   containing    relocatable
  1458.                         segment references.
  1459.  
  1460.                   - OS  entries probably  containing  calls
  1461.                         to  operating   system   functions.
  1462.  
  1463.  
  1464.             Let's see how  VEXE  handle  each  entry  type:
  1465.  
  1466.  
  1467.             - IMP: the type field come first (BASE, PTR  or
  1468.                    OFFSET) followed by  an  offset  to  the
  1469.                    call (relative to the beginning  of  the
  1470.                    segment).
  1471.  
  1472.                    The target field holds the module's name,
  1473.                    the  entry   point  ordinal  value  when
  1474.                    reference is by value, or  directly  the
  1475.                    external name when reference is by name.
  1476.  
  1477.                    For external names referenced by  value,
  1478.                    VEXE will first search the value in  its
  1479.                    own  tables  containing  every  function
  1480.                    exported by these Windows  3.0  modules:
  1481.  
  1482.                             - KERNEL.EXE
  1483.                             - GDI.EXE
  1484.                             - USER.EXE
  1485.                             - SYSTEM.DRV
  1486.                             - COMM.DRV
  1487.                             - KEYBOARD.DRV
  1488.                             - SOUND.DRV
  1489.  
  1490.                    If no  name  corresponding to the ordinal
  1491.                    value is found, VEXE will try to find the
  1492.                    referenced    module   as   'module.EXE',
  1493.                    'module.DLL'  or   'module.DRV'   in  the
  1494.                    current directory.
  1495.  
  1496.                    The name will be displayed if one  search
  1497.                    was succesfull.
  1498.  
  1499.  
  1500.             - SEG: the type field come first (BASE, PTR  or
  1501.                    OFFSET) followed by  an  offset  to  the
  1502.                    segment  reference   to  be   relocated.
  1503.  
  1504.                    The target field  contains  the  address
  1505.                    used to relocate the  segment reference.
  1506.  
  1507.             - OS : Any idea concerning this entry  type  is
  1508.                    welcome!
  1509.  
  1510.             Because the relocation tables may contain several
  1511.             hundred entries, the  Z  option  is  inactive  by
  1512.             default to avoid generation  of  Kb  of  unwanted
  1513.             informations every time you use VEXE.
  1514.  
  1515.             You  can  abort  the  display  of  these  entries
  1516.             by pressing ESCAPE.
  1517.  
  1518.  
  1519.  
  1520.         ┌─┬──────────────────────────┐
  1521.         │2│▒▒ VEXE DEFAULT OPTIONS ▒▒│
  1522.         └─┴──────────────────────────┘
  1523.  
  1524.  
  1525.             Some options are nearly essential to analyze a  .EXE,
  1526.         .DLL or .DRV file correclty. Therefore VEXE  doesn't  ask
  1527.         you to include the folowing options in your command line:
  1528.  
  1529.  
  1530.              c     show filename & filesize with packer
  1531.                    & compiler infos
  1532.  
  1533.              e     show Windows entry table bundles
  1534.  
  1535.              h     show classical DOS executable file header
  1536.  
  1537.              m     show Windows imported modules table
  1538.  
  1539.              n     show Windows non-resident names table
  1540.  
  1541.              r     show Windows resident names table
  1542.  
  1543.              s     show Windows segment table
  1544.  
  1545.              w     show Windows executable file header
  1546.  
  1547.  
  1548.             If you include one of them anyway, only  this  option
  1549.         will be considered by VEXE when processing the input file.
  1550.         In fact, for VEXE only L and Q options are additive, other
  1551.         options override the default settings.
  1552.  
  1553.  
  1554.                     C:\> VEXE/CL  C:\EXAMPLE\*.EXE
  1555.  
  1556.  
  1557.             In this example the output of VEXE is made of  blocks
  1558.         of size, load module, packer  and  compiler  informations
  1559.         for  every   executable  file  found  in  the  C:\EXAMPLE
  1560.         directory, or deeper  in  the  directory  structure.  All
  1561.         default options were overrided by the C option,  and  the
  1562.         L option added to form the complete command line.
  1563.  
  1564.  
  1565.  
  1566.         ┌───┬─────────────────────────┐
  1567.         │III│▒▒ VEXE ERROR MESSAGES ▒▒│
  1568.         └───┴─────────────────────────┘
  1569.  
  1570.  
  1571.             The following error messages may  appear  when  using
  1572.         VEXE. A brief explanation  of  each  message  along  with
  1573.         possible solutions is listed below.
  1574.  
  1575.  
  1576.         - Error creating output file FILENAME !!!!  Try again...
  1577.  
  1578.         > VEXE could not create the output file. If  you  have
  1579.           specified an output file, make sure it  is  a  valid
  1580.           filename and location.
  1581.  
  1582.         - Missing quotes near output filename's end !!!!
  1583.  
  1584.         > VEXE is unable to find one of the quotes surrounding
  1585.           the  output  file  name.  Make  sure  you  correctly
  1586.           surrounded the output file name with quotes.
  1587.  
  1588.         - Incorrect option '?' in command line !!!!
  1589.  
  1590.           Type VEXE alone to view the option summary.
  1591.  
  1592.         > This error appears when the VEXE  command  line  you
  1593.           have entered contains an invalid option.  Just  type
  1594.           VEXE alone to print the help screen showing all  the
  1595.           program options on the monitor.
  1596.  
  1597.         - No file found that match FILENAME !!!!  Try again...
  1598.  
  1599.         > The file you have attempted  to  analyze  cannot  be
  1600.           opened by VEXE. Verify that you didn't mis-spell the
  1601.           file name.
  1602.  
  1603.         - Incorrect parameter in command line !!!!
  1604.  
  1605.           Type VEXE alone to view the help screen.
  1606.  
  1607.         > You probably forget to enter the slash ('/') at  the
  1608.           beginning of your options list. Please keep in  mind
  1609.           when you use two parameters to put first the options
  1610.           list preceded by a slash, then the input file  name.
  1611.  
  1612.         - EXE signature 4D5Ah not found. This isn't an EXE file !
  1613.  
  1614.         > The file you have attempted to analyze isn't a  true
  1615.           .EXE file. True .EXE files contains a  signature  in
  1616.           their  two  first  bytes  (4D5Ah).  VEXE  will  only
  1617.           analyze files beginning with this signature.
  1618.  
  1619.         - EXE's header too large. File not processed !
  1620.  
  1621.         > The header information of the file contains too much
  1622.           information to be analyzed. This error appears  when
  1623.           you try to list a DOS relocation table  bigger  than
  1624.           64 Kb.
  1625.  
  1626.         - Not enough memory left to run VEXE.EXE...
  1627.  
  1628.         > This error will only occur when there is insufficient
  1629.           memory available to load every input file names to be
  1630.           analyzed. Try making more memory available.
  1631.  
  1632.  
  1633.             VEXE is able to tell  you  that  you're  analyzing  a
  1634.         Windows or OS/2 program containing too many tables items,
  1635.         and that VEXE, unregistred version, is unable to load all
  1636.         of them. Nevertheless, VEXE  will  try  to  complete  the
  1637.         analysis of the file. If you specified option 'Z' to view
  1638.         the Windows segment relocation tables, be warned that the
  1639.         content of those tables maybe inaccurate and strange !
  1640.  
  1641.  
  1642.  
  1643.         ┌──┬───────────────────────┐
  1644.         │IV│▒▒ BUGS AND WARNINGS ▒▒│
  1645.         └──┴───────────────────────┘
  1646.  
  1647.  
  1648.             VEXE was written in several stages. It started as a
  1649.         replacement for F.Bellard's INFOEXE.EXE, and growed  up
  1650.         to finally become this public release version. Now VEXE
  1651.         is so complex that some parts of its code would be hard
  1652.         to modify. Naturally, the most questionable  parts  are
  1653.         the more likely to requer a change. Shown  below  is  a
  1654.         non-exhaustive list of these poorly written code parts:
  1655.  
  1656.  
  1657.              - If VEXE is unable to open, to create or  to
  1658.                read a specified file, it may  be  possible
  1659.                that a  system  error  message  appears  on
  1660.                your screen. This is due to a lack of error
  1661.                handling from me. Please try to  understand
  1662.                the meaning of this message to correct  the
  1663.                error (if possible).
  1664.  
  1665.              - The advice shown above  is  also  true  for
  1666.                write error and disk full  error  messages.
  1667.  
  1668.              - If not enough memory could be allocated  to
  1669.                VEXE, prepare yourself to  really  horrible
  1670.                DOS  messages.  However, this error is very
  1671.                unlikely.
  1672.  
  1673.              - The compiler searching routine is potentially
  1674.                incorrect. It's possible that VEXE  couldn't
  1675.                recognize  the compiler used to produce  the
  1676.                file, although the compiler mark is still in
  1677.                it. This is a very improbable case that will
  1678.                occur if the  mark is only partially read in
  1679.                the buffer of VEXE. On 200 executable  files
  1680.                analyzed, none showed such problem,  because
  1681.                VEXE's read buffer is very  big  to  achieve
  1682.                maximum processing speed.
  1683.  
  1684.  
  1685.             Undoubtly some bugs remains hidden in VEXE. I did a
  1686.         thorough testing of the  program  before I released it,
  1687.         but I cannot  guarantee that  it  will  work  perfectly
  1688.         under all circumstances.
  1689.  
  1690.             If you you encounter any bugs, I would like to  know
  1691.         about them.  My name and address may be found at the end
  1692.         of this file. I would also appreciate  any  suggestions,
  1693.         and will try to include them in future releases of VEXE.
  1694.  
  1695.  
  1696.  
  1697.         ┌─┬───────────────┐
  1698.         │V│▒▒ VEXE TIPS ▒▒│
  1699.         └─┴───────────────┘
  1700.  
  1701.  
  1702.             Here are some tips that will make your  life  easier
  1703.         when using VEXE:
  1704.  
  1705.                  - If you're viewing a long table  and  like
  1706.                    to stop VEXE without losing  your  output
  1707.                    file or crashing your system, just  press
  1708.                    CTRL BREAK. VEXE includes a break-handler
  1709.                    that will close the output file and  exit
  1710.                    flawlessly. Don't mind the system message
  1711.                    'Run time error', it's only the  compiler
  1712.                    runtime saying 'everything OK for exit' .
  1713.  
  1714.                  - When using VEXE on very large  number  of
  1715.                    files,you better choose the output option
  1716.                    (i.e.  /"output filename")  if  you  want
  1717.                    break-handling  capabilities  and  faster
  1718.                    output speed.  DOS  redirection  is  30 %
  1719.                    slower than VEXEs write routines.
  1720.  
  1721.  
  1722.  
  1723.         ┌──┬────────────────────────────────────┐
  1724.         │VI│▒▒ FILES INCLUDED IN THIS ARCHIVE ▒▒│
  1725.         └──┴────────────────────────────────────┘
  1726.  
  1727.  
  1728.             Shown below is a list of files that should be included
  1729.         in this archive file:
  1730.  
  1731.  
  1732.                   VEXE.EXE    :   the file analyzer itself
  1733.  
  1734.                   VEXE.DOC    :   this file
  1735.  
  1736.                   ORDER.FRM   :   the   order  form  stand
  1737.                                   alone version
  1738.  
  1739.             If one of these files is missing,  please  contact  me
  1740.         to receive the latest unregistered version of VEXE  (don't
  1741.         forget shipping charges).
  1742.  
  1743.  
  1744.  
  1745.         ┌───┬──────────────────┐
  1746.         │VII│▒▒ BIBLIOGRAPHY ▒▒│
  1747.         └───┴──────────────────┘
  1748.  
  1749.  
  1750.             A programmer is often lost without the  precious  help
  1751.         of his predecessors. This help, for me,  was  well-written
  1752.         programs and clear reference texts. I wish to  include  in
  1753.         this little  bibliography a  partial  list  of  all  these
  1754.         books, texts and jewels of code without  them  doing  VEXE
  1755.         were impossible. Many thanks to their authors.
  1756.  
  1757.  
  1758.         - The Programmers PC SourceBook, Thom Hogan, Microsoft Press
  1759.  
  1760.         - The MSDOS Interrupt List, Ralf Brown
  1761.  
  1762.         - EXEHDR.EXE, Microsoft Corp.
  1763.  
  1764.         - INFOEXE.EXE, F.Bellard
  1765.  
  1766.         - UNDOCFCT.EXE, D.J. Murdoch
  1767.  
  1768.         - WHATIS.EXE, J.E. Smith
  1769.  
  1770.         - CHK4COMP.EXE, John Land
  1771.  
  1772.  
  1773.  
  1774.         ┌────┬─────────────┐
  1775.         │VIII│▒▒ HISTORY ▒▒│
  1776.         └────┴─────────────┘
  1777.  
  1778.  
  1779.            09/91 - VEXE v2.22, Swiss public release. Windows
  1780.                    tables listing not included. Many  little
  1781.                    bugs. Public Domain.
  1782.  
  1783.            12/91 - VEXE v4.00, International public release.
  1784.                    Windows tables listing  included.  Tested
  1785.                    and debugged  version.  Several  cosmetic
  1786.                    changes. Crippled Shareware.
  1787.  
  1788.  
  1789.  
  1790.         ┌──┬──────────────────────┐
  1791.         │IX│▒▒ ACKNOWLEDGEMENTS ▒▒│
  1792.         └──┴──────────────────────┘
  1793.  
  1794.  
  1795.             All the following people deserve recognition for their
  1796.         contributions:
  1797.  
  1798.  
  1799.         - My mother, for all her love and help.
  1800.  
  1801.         - Patrick Galley, for invaluable advices on many occasions.
  1802.  
  1803.         - The beta test team, for testing VEXE during  long  hours.
  1804.  
  1805.  
  1806.  
  1807.         ┌─┬───────────────────────────────┐
  1808.         │X│▒▒ TRADEMARKS AND COPYRIGHTS ▒▒│
  1809.         └─┴───────────────────────────────┘
  1810.  
  1811.  
  1812.         - INTEL              is a trademark  of Intel Corporation
  1813.  
  1814.         - OS/2,
  1815.           MS-DOS,
  1816.           WINDOWS,
  1817.           EXEPACK,
  1818.           QUICK C,
  1819.           QUICK BASIC,
  1820.           MICROSOFT C        are  trademarks of Microsoft Corporation
  1821.  
  1822.         - PKLITE,
  1823.           PKZIP              are  trademarks of PKWare Inc.
  1824.  
  1825.         - LZEXE              is a trademark  of Fabrice Bellard
  1826.  
  1827.         - DIET               is a trademark  of Teddy Matsumoto
  1828.  
  1829.         - TINYPROG           is a trademark  of Tranzoa Co.
  1830.  
  1831.         - SCRNCH             is a trademark  of G.W. McRae
  1832.  
  1833.         - CPUUSE             is a trademark  of Jim Seidman
  1834.  
  1835.         - TPW,
  1836.           TDUMP,
  1837.           TURBO C,
  1838.           TURBO C++,
  1839.           TURBO BASIC,
  1840.           TURBO PROLOG,
  1841.           TURBO PASCAL       are  trademarks of Borland International
  1842.  
  1843.         - LOGITECH MODULA2   is a trademark  of Logitech Inc.
  1844.  
  1845.         - JPI TOPSPEED M2    is a trademark  of Jensen & Partners
  1846.  
  1847.         - LATTICE C          is a trademark  of Lattice Inc.
  1848.  
  1849.         - POWER C            is a trademark  of MIX Software
  1850.  
  1851.         - ZORTECH C          is a trademark  of Zortech
  1852.  
  1853.         - JANUS ADA          is a trademark  of RR Software
  1854.  
  1855.         - MERIDIAN ADA       is a trademark  of Meridian
  1856.  
  1857.  
  1858.  
  1859.         ┌──┬────────────────────────────┐
  1860.         │XI│▒▒ LAST WORDS AND ADDRESS ▒▒│
  1861.         └──┴────────────────────────────┘
  1862.  
  1863.  
  1864.             Any  comments of what you think of VEXE and suggestions
  1865.         of future enhancements you would like to see  can  be  sent
  1866.         via ordinary SnailMail or Email to me.
  1867.  
  1868.             Requests for site  license, source code  or  customized
  1869.         versions are welcome. They will be examined on case by case
  1870.         basis.I'll make my best to answer quickly to every request.
  1871.  
  1872.             If you have comments, bug reports, etc., you can  reach
  1873.         me through:
  1874.  
  1875.  
  1876.  
  1877.              My address   :    Mr Serge Krupa
  1878.                                19 A chemin des Bois
  1879.                                1255 Geneva
  1880.                                Switzerland
  1881.  
  1882.              Internet mail:    krupa@eig.unige.ch
  1883.              (until June 92)
  1884.  
  1885.  
  1886.  
  1887.  
  1888.  
  1889.         (I wish to apologize for my poor english. Many thanks for
  1890.          reading this text to the end !)
  1891.  
  1892.  
  1893.         ─────────────────────────── EOF ───────────────────────────
  1894.  
  1895.